package proceso.busqueda;

import org.hibernate.Query;
import org.hibernate.Session;

import modelo.poligonal.Poligonal;
import modelo.regionRiego.RegionRiego;
import modelo.zonariego.ZonaRiego;

/**
 * 
 * @author edgar
 * Determinacion de la zona de riego para un punto dado.
 * Se asme zonas excluyentes y una zona puede tener varios poligonos
 * 
 */
public class BuscarZonaRiego {
	private ZonaRiego zona;
	private String razon;
	private Poligonal poligonal;
	
	public ZonaRiego getZona() {
		return zona;
	}

	public void setZona(ZonaRiego zona) {
		this.zona = zona;
	}

	public String getRazon() {
		return razon;
	}

	public void setRazon(String razon) {
		this.razon = razon;
	}

	public Poligonal getPoligonal() {
		return poligonal;
	}

	public void setPoligonal(Poligonal poligonal) {
		this.poligonal = poligonal;
	}

	public boolean buscar(Session sess, String nombreRegion, double este, double norte){
		RegionRiego region;
		
		Query q;
		q = sess.createQuery("From RegionRiego as r where r.nombre like :nombreRegion");
		q.setParameter("nombreRegion", nombreRegion);
		if(q.list().size() == 1){
			region = (RegionRiego) q.list().get(0);
			boolean encontrado = false;		
			for(int i=0; i<region.getListaZona().size();i++){
				zona = region.getListaZona().get(i);
				for(int j=0; j<zona.getListaPoligonal().size() && !encontrado; j++) {			
					poligonal = zona.getListaPoligonal().get(j);
					encontrado = poligonal.verificarPertenencia(este, norte);
				}
			}
			if(!encontrado) {
				razon = "El punto no pertenece a ninguna zona";
				return false;
			}
		}
		else{
			razon =" No existe la region "+ nombreRegion;
			return false;
		}


		return true;
	}
	
}
